# ☆☆☆☆☆自动提款机系统☆☆☆☆☆
# -------------------------------------------------------------------------
# 定义一个用于用户信息的变量列表
account = ['6110200065784', '6110200094113', '6110200013582', '1989032900222']  # 账号
password = ['123456', '123654', '987654', '888888']  # 密码
name = ['马一', '王二', '李三', '周四']  # 客户姓名
balance = [4005, 2500682, 1500, 15000]  # 账户余额


def huanhang():
    x = 50
    while x > 0:
        print("")
        x -= 1


# -------------------------------------------------------------------------
# 定义一个登入界面输出函数
def Logininterface():
    '''
    登陆界面的输出函数
    '''
    huanhang()
    print("")
    print("")
    print(" " * 12, "中国Python银行自动提款机")
    print("")
    print(" " * 16, "欢迎光临,请插卡!", " " * 18)
    print("")

# 定义一个登入界面输出函数
def input_password():
    '''
    登陆界面的输出函数
    '''
    print(" " * 12, "中国Python银行自动提款机")
    print("")
    print(" " * 16, "欢迎光临,请输密码!", " " * 18)
    print("")



# --------------------------------------------------------------------------
# 定义一个登入以后操作界面输出函数
def interface():
    '''
    登陆后主菜单操作界面的输出函数
    '''
    huanhang()
    print(" " * 16, '尊敬的: ', name[sn], ' 先生您好!')
    print("")
    print("    欢迎使用中国Python银行自动提款系统,请根据您的需要进行操作!")
    print("")
    print("{0:15} {1:13} {2:15}".format(" ", "1. 余额", "2. 取钱"))
    print("{0:15} {1:13} {2:15}".format(" ", "3. 存钱", "4. 退卡"))
    print("")


# ---------------------------------------------------------------------------
# 查询余额界面的输出函数
def balance_enquiry():
    '''
    余额查询界面的输出函数
    '''
    huanhang()
    print("")
    print("=" * 12, " 余额 ", "=" * 14)
    print("")
    print('您的余额为:', balance[sn])
    print("")
    input("回车返回上一菜单: ")


# ---------------------------------------------------------------------------
# 取款界面的输出函数
def withdrawals():
    '''
    取款界面的输出函数
    '''
    correct_amount = -1
    while correct_amount < 0:
        huanhang()
        print("=" * 12, " 取款 ", "=" * 14)
        print("")
        m_o = int(input('请输入您的取款额度:'))
        if m_o > 10000:
            print('单次最大取款额度10000元！')
            print('请重新输入有效取款金额！')
            input("回车重新输入: ")
        elif m_o > balance[sn]:
            print('取款金额不能大于余额！')
            print('请重新输入有效取款金额！')
            input("回车重新输入: ")
        else:
            huanhang()
            print("")
            print(" " * 10, "温馨提示: ")
            balance[sn] = balance[sn] - m_o
            print("")
            print("您的取款额度为: ", m_o)
            print("")
            print(" " * 5, "请及时从窗口取走您的钱! ")
            print("")
            print("您的剩余存款为:", balance[sn])
            print("")
            correct_amount = 1
            input("按回车返回上一菜单: ")

# ---------------------------------------------------------------------------
# 存款界面函数
def save_money():
    '''
    存款界面的输出函数
    '''
    # 存款操作主界面
    correct_amount = -1
    while correct_amount < 0:
        huanhang()
        print("=" * 12, "存钱", "=" * 14)
        print("")
        m_i = int(input('请输入您的存款额度:'))
        # 存款信息提醒
        if m_i > 10000:
            print('单次最大存款额度10000元！')
            print('请重新输入有效取款金额！')
            input("回车重新输入: ")
        else:
            huanhang()
            balance[sn] = balance[sn] + m_i
            print("")
            print(" " * 10, "温馨提示: ")
            print("")
            print("您的本次存款: ", m_i)
            print("")
            print("您最新存款余额为:", balance[sn])
            print("")
            correct_amount = 1
            input("按回车返回上一菜单: ")

# -------------------------------------------------------------------------
# 退卡界面

def take_crad():
    '''
    登陆界面的输出函数
    '''
    huanhang()
    print("")
    print("=" * 12, "请及时取走您的卡片!", "=" * 14)
    print("")
    print("=" * 12, "!欢迎下次光临!", "=" * 14)
    print("")
    input("回车取走卡片: ")

# 密码错误提醒

def wrong_password():
    '''
    登陆界面的输出函数
    '''
    print("")
    print('密码错误！您还有  ', errors_password - 1, '  次机会,请继续输入!')
    print("")
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# 第一层循环,确认输入卡号是否存在
while True:
    # 输出登入界面
    huanhang()
    Logininterface()
    # acc = '1989032900222'
    acc = input("请输入您的银行卡号并回车确认： ")
    print("-" * 100)
    esc = 0
    # 第一层循环1:根据键盘输入的值，判断并执行对应的操作
    if acc in account:
        # 提取输入的账号序号,便于提取相应的其他信息:sn--serial number缩写
        sn = account.index(acc)
        # 为下一层的密码输入错误次数提前赋值
        errors_password= 4
        # ---------------------------------------------------------------------------
        # 第二层循环,判断密码是否正确
        # 正确继续操作,不正确超过3次退出本循环
        huanhang()
        while errors_password > 0:
            # 输出密码界面
            input_password()
            in_password = input("密码输入处： ")
            print("")
            huanhang()
            # 第二次循环1:密码超过三次,退出第二层循环,进入第一层循环--主菜单
            # 第二层循环2:密码如果正确,执行以下语句
            if in_password == password[sn]:
                # ---------------------------------------------------------------------------
                # 第三层循环,对正式登陆界面的操作
                while True:
                    # 登陆后的操作界面
                    interface()
                    key = input("请输入您的操作并回车确认： ")
                    # 第三层循环1
                    if key == "1":
                        # 余额查询界面：显示余额
                        balance_enquiry()
                    # 第三层循环2
                    elif key == "2":
                        # 取款界面
                        withdrawals()
                    # 第三层循环3
                    elif key == "3":
                        save_money()
                    # 第三层循环4	:退卡,返回主菜单.问题:没法一下回到一层循环
                    elif key == "4":
                        take_crad()
                        errors_password = -1
                        break
                    # 第三层循环5	:操作错误提醒
                    else:
                        print("")
                        print("=" * 12, "!操作无效,请再次操作!", "=" * 14)
                        print("")
            # 第二次循环:密码输错,将进行3次机会倒数提醒
            else:
                # 如果只剩一次机会,将提醒系统即将退出
                wrong_password()
                errors_password -= 1
    # 第一层循环的else语句
    else:
        print("")
        print("")
        print(" " * 14, "！！！卡号不存在！！！")
        print("")
